package vip.aster.workflow.service.impl;

import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import vip.aster.common.utils.PageInfo;
import vip.aster.workflow.dto.*;
import vip.aster.workflow.entity.DataColum;
import vip.aster.workflow.mapper.DataSourceMapper;
import vip.aster.workflow.service.DataSourceService;

import java.util.List;
import java.util.Map;

/**
 * 动态表单业务接口实现类
 */
@Slf4j
@Service
@AllArgsConstructor
public class DataSourceServiceImpl implements DataSourceService {

    /**
     * 数据库Mapper
     */
    private DataSourceMapper dataSourceMapper;

    /**
     * 执行sql
     *
     * @param sql sql语句
     */
    @Override
    public void execute(String sql) {
        if (!StringUtils.isBlank(sql)) {
            dataSourceMapper.execute(sql);
        } else {
            log.info("【执行sql失败：sql语句为空】");
        }
    }

    /**
     * 查询数据列信息
     *
     * @param columnDto 查询条件
     * @return 数据库表列信息
     */
    @Override
    public List<DataColum> listColumn(ColumnDto columnDto) {
        return dataSourceMapper.listColumn(columnDto);
    }

    /**
     * 添加列信息
     *
     * @param addColumnDto 添加列对象
     */
    @Override
    public void addVarcharColumn(AddColumnDto addColumnDto) {
        dataSourceMapper.addVarcharColumn(addColumnDto);
    }

    /**
     * 批量新增列信息
     *
     * @param batchAddColumnDto 列集合
     */
    @Override
    public void batchAddColumnList(BatchAddColumnDto batchAddColumnDto) {
        dataSourceMapper.batchAddColumnList(batchAddColumnDto);
    }


    /**
     * 修改列信息
     *
     * @param updateColumnDto 修改列对象
     */
    @Override
    public void updateVarcharColumn(UpdateColumnDto updateColumnDto) {
        dataSourceMapper.updateVarcharColumn(updateColumnDto);
    }

    /**
     * 批量修改列信息
     *
     * @param batchAddColumnDto 列集合
     */
    @Override
    public void batchUpdateColumn(BatchAddColumnDto batchAddColumnDto) {
        dataSourceMapper.batchUpdateColumn(batchAddColumnDto);
    }

    /**
     * 保存
     *
     * @param dynamicData 动态表和数据
     * @return 成功或失败
     */
    @Override
    public boolean save(DynamicDataDto dynamicData) {
        return dataSourceMapper.save(dynamicData) == 1;
    }

    /**
     * 查询动态数据
     *
     * @param dynamicData 动态数据
     * @return 数据集合
     */
    @Override
    public List<Map<String, Object>> select(DynamicDataDto dynamicData) {
        return dataSourceMapper.select(dynamicData);
    }

    /**
     * 分页查询
     *
     * @param query 查询条件
     * @return 数据集合
     */
    @Override
    public PageInfo<Map<String, Object>> selectPage(Map<String, Object> query) {
        int pageNum = query.containsKey("pageNum") ? MapUtil.getInt(query, "pageNum") : 1;
        int pageSize = query.containsKey("pageSize") ? MapUtil.getInt(query, "pageSize") : 10;
        Page<Map<String, Object>> page = new Page<>(pageNum, pageSize);
        DynamicDataDto pageQuery = new DynamicDataDto();
        pageQuery.setTableName(MapUtil.getStr(query, "code"));
        IPage<Map<String, Object>> pageList = dataSourceMapper.selectPage(page, pageQuery);
        return new PageInfo<>(pageList.getRecords(), pageList.getTotal());
    }

}
